﻿// 麻省理工学院许可证
//
// 版权所有 (c) 2021-2023 zuohuaijun，大名科技（天津）有限公司  联系电话/微信：18020030720  QQ：515096995
//
// 特此免费授予获得本软件的任何人以处理本软件的权利，但须遵守以下条件：在所有副本或重要部分的软件中必须包括上述版权声明和本许可声明。
//
// 软件按“原样”提供，不提供任何形式的明示或暗示的保证，包括但不限于对适销性、适用性和非侵权的保证。
// 在任何情况下，作者或版权持有人均不对任何索赔、损害或其他责任负责，无论是因合同、侵权或其他方式引起的，与软件或其使用或其他交易有关。


using Admin.NET.Core.Service;

namespace Admin.NET.Application.Job;

/// <summary>
/// 清除缓存为null的值
/// </summary>
[JobDetail("Job_ClearNullCache", Description = "清除物料缓存为null的值", GroupName = "Cache", Concurrent = false)]
[PeriodMinutes(1, TriggerId = "Trigger_ClearNullCache", StartNow = true, RunOnStart = true)]
public class ClearExistCacheNull : IJob
{
    private SysCacheService _cacheServices = App.GetRequiredService<SysCacheService>();

    public Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
    {
        try
        {
            // 获得前缀为Mat的缓存
            List<string> strings = _cacheServices.GetKeysByPrefixKey("Mat");
            Dictionary<string, object> keyValues = new Dictionary<string, object>();
            for (int i = 0; i < strings.Count; i++)
            {
                var cachedata = _cacheServices.GetValue(strings[i]);
                keyValues.Add(strings[i], cachedata);
            }
            // 为null的key值
            var existcachenull = keyValues.Where(x => x.Value == null).Select(x => x.Key).ToList();

            if (existcachenull.Count == 0)
            {
                return Task.CompletedTask;
            }
            // 删除为null的缓存key
            for (int i = 0; i < existcachenull.Count; i++)
            {
                _cacheServices.Remove(existcachenull[i]);
            }
            return Task.CompletedTask;
        }
        catch (Exception ex)
        {
            throw Oops.Oh(ex.Message);
        }

    }
}
